package com.penghaisoft.microwms.producthand.web.controller.intowarehouse;

import java.util.concurrent.TimeUnit;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.penghaisoft.microwms.common.Constant;
import com.penghaisoft.microwms.common.controller.HandBaseController;
import com.penghaisoft.microwms.common.dto.HandResp;
import com.penghaisoft.microwms.common.dto.ProBarcodeDto;
import com.penghaisoft.microwms.common.dto.TransResult;
import com.penghaisoft.microwms.product.service.IProBarcodeService;

/** 
* @ClassName: IntoWarehouseController 
* @Description: 成品扫码入库（积压库存）
* @author luoteng
* @date 2018年11月5日 下午2:51:51  
*/
@RestController
@RequestMapping("intowh/pro")
public class IntoWarehouseController extends HandBaseController {

    @Autowired
    private IProBarcodeService proBarcodeService;
    
    @Resource
	private StringRedisTemplate stringRedisTemplate;//注入对象
    
    /** 
     * @Title scanBarcode
     * @Description 扫码入库
     * @author luoteng
     * @date 2018年5月29日:上午10:38:00
     * @param rawBarcodeDto
     * @return HandResp
     */
    @PostMapping("scan")
    public HandResp scanBarcode(@RequestBody ProBarcodeDto proBarcodeDto){
        HandResp resp = new HandResp();
        resp.setCode(Constant.SUCCESS);
        if (proBarcodeDto.getBarcode() == null || proBarcodeDto.getBarcode().equals("")){
        	resp.setCode(Constant.FAIL);
        	resp.setMsg("请扫描条码！");
            return resp;
        }
        
        String key = Constant.PRO_INWH_PREFIX + proBarcodeDto.getBarcode();
        if(stringRedisTemplate.hasKey(key)){
			resp.setCode(Constant.FAIL);
			resp.setMsg("当前条码正在处理中，请不要重复扫描！");
			return resp;
		}else{
			stringRedisTemplate.opsForValue().set(key, "1", Constant.PRO_HAND_LOST_MINUTES, TimeUnit.MINUTES);//写入对象，并设置失效时间
			
			TransResult result = proBarcodeService.scanBarcode(proBarcodeDto);
	        resp.setCode(result.getCode());
	        resp.setMsg(result.getMsg());
	        resp.setList(result.getList());
	        
	        stringRedisTemplate.delete(key);//删除对象
		}
		
        return resp;
    }
    
    /** 
     * @Title delBarcode
     * @Description 退扫条码
     * @author luoteng
     * @date 2018年5月29日:下午1:29:54
     * @param rawBarcodeDto
     * @return HandResp
     */
    @PostMapping("del")
    public HandResp delBarcode(@RequestBody ProBarcodeDto proBarcodeDto){
        HandResp resp = new HandResp();
        resp.setCode(Constant.SUCCESS);
        if (proBarcodeDto.getBarcode() == null || proBarcodeDto.getBarcode().equals("")){
        	resp.setCode(Constant.FAIL);
        	resp.setMsg("请扫描条码！");
            return resp;
        }
        
        String key = Constant.PRO_INWH_PREFIX + proBarcodeDto.getBarcode();
        
        if(stringRedisTemplate.hasKey(key)){
			resp.setCode(Constant.FAIL);
			resp.setMsg("当前条码正在处理中，请不要重复扫描！");
			return resp;
		}else{
			stringRedisTemplate.opsForValue().set(key, "1", Constant.PRO_HAND_LOST_MINUTES, TimeUnit.MINUTES);//写入对象，并设置失效时间
			
			TransResult result = proBarcodeService.delBarcode(proBarcodeDto);
	        resp.setCode(result.getCode());
	        resp.setMsg(result.getMsg());
	        
	        stringRedisTemplate.delete(key);//删除对象
		}
        
        return resp;
    }
}
